package com.lfs.handler;

import com.lfs.domain.MonthQuestionnaire;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.List;

/**
 * poi操作
 */
@Slf4j
public class PoiHandler {

    /**
     * 模板导出
     * @param templateFilePath 模板路径
     * @param outputFilePath 输出路径
     * @param monthQuestionnaires 数据
     */
    public static void export(String templateFilePath, String outputFilePath, List<MonthQuestionnaire> monthQuestionnaires) {
        try {
            // 创建工作簿
            FileInputStream fis = new FileInputStream(templateFilePath);
            Workbook workbook = new XSSFWorkbook(fis);
            // 获取第一个 Sheet
            Sheet sheet = workbook.getSheetAt(0);
            // 创建日期格式
            DataFormat format = workbook.createDataFormat();
            CellStyle dateStyle = workbook.createCellStyle();
            dateStyle.setDataFormat(format.getFormat("yyyy年M月d日"));
            // 写入数据
            int rowIndex = 1; // 假设模板的第一行是标题行，数据从第二行开始
            for (MonthQuestionnaire data : monthQuestionnaires) {
                Row row = sheet.createRow(rowIndex++);

                // 写入每个字段
                row.createCell(0).setCellValue(data.getDr());
                row.createCell(1).setCellValue(data.getMr());

                // 日期需要特殊处理
                Cell dateCell = row.createCell(2);
                dateCell.setCellValue(data.getDate());
                dateCell.setCellStyle(dateStyle);

                row.createCell(3).setCellValue(data.getHospital());
                row.createCell(4).setCellValue(data.getName());
                row.createCell(6).setCellValue(data.getSymptom());
                row.createCell(7).setCellValue(data.getAdType());
                row.createCell(8).setCellValue(data.getInsurance());
                row.createCell(9).setCellValue(data.getAdScheme());
                row.createCell(10).setCellValue(data.getAdAdult());
            }
            // 写入文件
            FileOutputStream fos = new FileOutputStream(outputFilePath);
            workbook.write(fos);
            fos.close();
            workbook.close();
        } catch (Exception e) {
            log.warn("关闭工作簿时出错", e);
        }
    }
}
